# 动态语言：运行时可以改变其结构的语言，例如新的函数、对象、甚至代码可以被引进，
# 已有的函数可以被删除或是其他结构上的变化。如php,JavaScript,python都是动态语言，C，C#，java是静态语言。
# 所以python可以在程序运行过程中添加属性和方法。
# 动态添加属性
class Person:
    def __init__(self,name,age):
        self.name=name
        self.age=age
        pass
    pass

################################动态添加属性##########################################
xm=Person("小明",23)    #创建实例化对象
# 动态添加实例属性
xm.sex="男"
print(xm.sex)
# print(Person.sex)   #实例属性类对象不能访问
xh=Person("小红",21)
# print(xh.sex)   #其它的实例对象无法访问

# 动态添加类属性
Person.eye=2
print(Person.eye)
print(xm.eye)
print(xh.eye)

################################动态添加方法##########################################
# 动态添加实例方法
# 动态添加实例方法需要使用types
# 1、创建一个实例方法
def eat(self):
    print("吃饭")
    pass
# 2、绑定实例属性需要用到types模块中的方法，需要提前导入
import types
# 3、使用types.MethodType进行动态绑定实例方法
xm.eat=types.MethodType(eat,xm)
xm.eat()

# 给类绑定类方法和静态方法
# 使用方式：类名.方法名 = xxxx
# 创建一个类方法
@classmethod
def sleep(cls):
    print("睡觉")
    pass
# 创建一个静态方法
@staticmethod
def run():
    print("奔跑吧！")
    pass
Person.sleep=sleep
Person.run=run
Person.sleep()
Person.run()
